<?php

/*
 * This file is part of SwiftMailer.
 * (c) 2004-2009 Chris Corbyn
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * General utility class in Swift Mailer, not to be instantiated.
 *
 * @package Swift
 *
 * @author Chris Corbyn
 */
abstract class Swift
{
	public static $initialized = false;
	public static $inits = array();

	/** Swift Mailer Version number generated during dist release process */
	const VERSION = '5.1.0';

	/**
	 * Registers an initializer callable that will be called the first time
	 * a SwiftMailer class is autoloaded.
	 *
	 * This enables you to tweak the default configuration in a lazy way.
	 *
	 * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class
	 */
	public static function init($callable)
	{
		self::$inits[] = $callable;
	}

	/**
	 * Internal autoloader for spl_autoload_register().
	 *
	 * @param string $class
	 */
	public static function autoload($class)
	{
		// Don't interfere with other autoloaders
		if (0 !== strpos($class, 'Swift_')) {
			return;
		}

		$path = dirname(__FILE__) . '/' . str_replace('_', '/', $class) . '.php';

		if (!file_exists($path)) {
			return;
		}

		require $path;

		if (self::$inits && !self::$initialized) {
			self::$initialized = true;
			foreach (self::$inits as $init) {
				call_user_func($init);
			}
		}
	}

	/**
	 * Configure autoloading using Swift Mailer.
	 *
	 * This is designed to play nicely with other autoloaders.
	 *
	 * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class
	 */
	public static function registerAutoload($callable = null)
	{
		if (null !== $callable) {
			self::$inits[] = $callable;
		}
		spl_autoload_register(array('Swift', 'autoload'));
	}
}
